package com.iflytek.sbd.demo.daili.dongtaidaili.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @program: sbd
 * @description: 调用处理器类
 * @author: 陈英俊
 * @create: 2022-01-04 14:40
 */
public class ProxyHandler implements InvocationHandler {


    /**
     * 构造方法传入一个实际处理的被代理类(真正内部干活的类,低调,没有向外暴露,代理类向外面暴露了)
     */
    private final Object object;

    public ProxyHandler(Object object) {
        this.object = object;
    }


    /**
     * 此处代理类将调用被代理类的方法
     *
     * @param proxy  代理类的实例
     * @param method 代理的方法
     * @param args   入参
     * @param result 返回值
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 这个地方可以对入参和返回值进行处理,类似于aop切面处理
        System.out.println(method.getName() + "方法开始执行");
        Object result = method.invoke(object, args);
        System.out.println(method.getName() + "方法执行结束");
        return result;
    }


    @Override
    public String toString() {
        return "ProxyHandler{" +
                "object=" + object +
                '}';
    }
}
